import logging
import traceback
import pytest
import requests
from tool.read_ini import ReadConfig
base_url = ReadConfig().read_conf().get('config', 'base_url')
username = ReadConfig().read_conf().get('config', 'username')
password = ReadConfig().read_conf().get('config', 'password')


"""
如果用例执行前需要先登录获取token值，就要用到conftest.py文件了
作用：conftest.py 配置里可以实现数据共享，不需要import导入 conftest.py，pytest用例会自动查找
scope参数为session，那么所有的测试文件执行前执行一次
scope参数为module，那么每一个测试文件执行前都会执行一次conftest文件中的fixture
scope参数为class，那么每一个测试文件中的测试类执行前都会执行一次conftest文件中的fixture
scope参数为function，那么所有文件的测试用例执行前都会执行一次conftest文件中的fixture


"""


# 获取到登录请求返回的ticket值，@pytest.fixture装饰后，testcase文件中直接使用函数名"login_ticket"即可得到ticket值
@pytest.fixture(scope="session")
def login_token():
    params = {"username": username, "password": password, "grant_type": "password", "client_id": "wsngt-h5", "client_secret": "wsngt-h5"}
    url = base_url + 'oauth/token'
    logging.info('开始调用登录接口:{}'.format(url))
    requests.packages.urllib3.disable_warnings()
    res = requests.post(url, data=params, verify=False)  # verify：忽略https的认证
    try:
        token = res.json()['access_token']
    except Exception as ex:
        logging.error('登录失败！接口返回：{}'.format(res.text))
        traceback.print_tb(ex)
    logging.info('登录成功，ticket值为：{}'.format(token))
    return token